import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

class User {
    public String username;
    public String password;
}

@WebServlet("/json")
public class JsonServlet extends HttpServlet {
    //使用jackson，最核心的对象就是ObjectMapper
    //通过这个对象，就可以把json字符串解析成Java对象，也可以把一个java对象转换成一个jackson对象
    private ObjectMapper objectMapper = new ObjectMapper();
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //通过post请求的body传递过来一个json格式的字符串
        //第一个参数就是解析哪个请求，可以直接是一个流对象,第二个参数就是转换后的目标对象
       User user = objectMapper.readValue(req.getInputStream(),User.class);
       //user.class就是user这个类的图纸，通过反射拿到这张图纸
       //readValue里面做的事: 1.解析字符串，转换成若干个键值对，2.根绝user.class去找到user中的
        //所有public的属性，3.遍历属性，根据属性中的名字查询这个名字对应的value，若存在，就把value
        //赋值到该属性中，这样就完成了对象的构造，（键值对的属性名必须和user类中的属性名是一样的）
        System.out.println("username=" + user.username + ", password=" + user.password);
        resp.getWriter().write("ok");
    }
}
